package fr.miage.course7.app.view;

import java.awt.Color;
import java.awt.Graphics;
import java.awt.image.BufferedImage;

/**
 * Classe abstraite qui définit plusieurs constructeur d'éléments "drawable".
 * @author Jean-Yannick TILIN
 * @author Alexandre JAHAN
 *
 */
public abstract class FormDrawable implements IDrawable {

    protected int x1, x2, y1, y2, x, y, width, height;
    protected Color color;
    protected String str;
    protected BufferedImage img;

    /**
     * Constructeur de lignes et rectangles.
     * @param color Couleur de la ligne
     * @param x1 Coordonnée en abscisse du 1er point
     * @param y1 Coordonnée en ordonnée du 1er point
     * @param x2 Coordonnée en abscisse du 2ème point
     * @param y2 Coordonnée en ordonnée du 2ème point
     */
    public FormDrawable(final Color color, final int x1, final int y1,
    		                               final int x2, final int y2){
        this.color = color;
        this.x1 = x1;
        this.x2 = x2;
        this.y1 = y1;
        this.y2 = y2;
    }

    /**
     * Constructeur de rectangles.
     * @param x Coordonnée en abscisse du 1er point
     * @param y Coordonnée en ordonnée du 1er point
     * @param width Largeur du rectangle
     */
    public FormDrawable(int x, int y, int width){
        this.x = x;
        this.y = y;
        this.width = width;
    }

    /**
     * Constructeur de Textes.
     * @param str Texte à peindre
     * @param color Couleur du texte
     * @param x Coordonnée en abscisse de l'image
     * @param y Coordonnée en ordonnée de l'image
     */
    public FormDrawable(final String str, final Color color,
    		            final int x, final int y){
        this.str = str;
        this.color = color;
        this.x = x;
        this.y = y;
    }

    /**
     * Constructeur d'images.
     * @param img Image
     * @param x Coordonnée en abscisse de l'image
     * @param y Coordonnée en ordonnée de l'image
     * @param width Hauteur de l'image
     * @param height Largeur de l'image
     */
    public FormDrawable(BufferedImage img,int x, int y, int width, int height){
        this.img = img;
        this.x = x;
        this.y = y;
        this.width = width;
        this.height = height;
    }

    /**
     * Méthode à implémenter pour peindre un élément.
     * @param g Graphics
     */
    public abstract void draw(Graphics g);
}
